/*
主要功能: 将一个左值的变量转换为右值引用，从而允许其资源被移动而不是复制。
这在处理大型对象（如动态分配的内存）时特别有用，因为它可以避免不必要的复制操作，从而提高性能。
 */
#include<iostream>
#include<string>
#include<vector>
#include <utility> // for std::move

int main() {
    std::string s1 = "Hello, world!";
    std::string s2 = std::move(s1); // s1的资源被移动到s2，s1现在为空

    std::cout << "s1: " << s1 << std::endl; // 输出：s1:
    std::cout << "s2: " << s2 << std::endl; // 输出：s2: Hello, world!

    std::vector<int> v1 = {1, 2, 3, 4, 5};
    std::vector<int> v2 = std::move(v1); // v1的资源被移动到v2，v1现在为空

    std::cout << "v1: ";
    for (int i : v1) {
        std::cout << i << " ";
    }
    std::cout<< std::endl; // 输出：v1:

    std::cout << "v2: ";
    for (int i : v2) {
        std::cout << i << " ";
    }
    std::cout<< std::endl; // 输出：v2: 1 2 3 4 5

    return 0;
}